package dtos

import "time"

// CreatePostDto 创建文章请求
type CreatePostDto struct {
	Title      string   `json:"title" binding:"required,min=3,max=255"`
	Slug       string   `json:"slug" binding:"required,min=3,max=255"`
	Content    string   `json:"content" binding:"required"`
	Excerpt    string   `json:"excerpt,omitempty"`
	CoverImage string   `json:"cover_image,omitempty"`
	CategoryID uint     `json:"category_id" binding:"required"`
	Tags       []string `json:"tags,omitempty"`
	Status     int      `json:"status,omitempty"` // 0: draft, 1: published
}

// UpdatePostDto 更新文章请求
type UpdatePostDto struct {
	Title      string   `json:"title,omitempty" binding:"min=3,max=255"`
	Slug       string   `json:"slug,omitempty" binding:"min=3,max=255"`
	Content    string   `json:"content,omitempty"`
	Excerpt    string   `json:"excerpt,omitempty"`
	CoverImage string   `json:"cover_image,omitempty"`
	CategoryID uint     `json:"category_id,omitempty"`
	Tags       []string `json:"tags,omitempty"`
	Status     int      `json:"status,omitempty"`
}

// PostResponse 文章响应
type PostResponse struct {
	ID          uint         `json:"id"`
	Title       string       `json:"title"`
	Slug        string       `json:"slug"`
	Excerpt     string       `json:"excerpt"`
	Content     string       `json:"content,omitempty"` // 详情页返回内容
	CoverImage  string       `json:"cover_image,omitempty"`
	User        UserInfo     `json:"user"`
	Category    CategoryInfo `json:"category"`
	Tags        []TagInfo    `json:"tags,omitempty"`
	Status      int          `json:"status"`
	ViewCount   int          `json:"view_count"`
	PublishedAt time.Time    `json:"published_at,omitempty"`
	CreatedAt   time.Time    `json:"created_at"`
	UpdatedAt   time.Time    `json:"updated_at"`
}

// PostListResponse 文章列表响应
type PostListResponse struct {
	ID         uint         `json:"id"`
	Title      string       `json:"title"`
	Slug       string       `json:"slug"`
	Excerpt    string       `json:"excerpt"`
	CoverImage string       `json:"cover_image,omitempty"`
	User       UserInfo     `json:"user"`
	Category   CategoryInfo `json:"category"`
	Tags       []TagInfo    `json:"tags,omitempty"`
	ViewCount  int          `json:"view_count"`
	CreatedAt  time.Time    `json:"created_at"`
}

// PostListResult 文章列表分页结果
type PostListResult struct {
	Posts     []PostListResponse `json:"posts"`
	Total     int64              `json:"total"`
	Page      int                `json:"page"`
	TotalPage int                `json:"total_page"`
}
